/******************************************************************************
                         COPYRIGHT 1955-2008 by BUPT ISC.
                        北京邮电大学信息安全中心 版权所有
                           Web: http://www.bupt.edu.cn
 *******************************************************************************/
/*******************************************************************************
  文件名： mqueue.h
  项目：   
  模块：   common
  作者：   huangwei
  版本：   0.1
  创建于:  2008-12-23 
  描述：
    多线程安全队列的数据结构声明和基本操作方法声明

  修改历史：
  日期： 修改人： 修改描述：

 *********************************************************************************/

#ifndef _MQUEUE_
#define _MQUEUE_
#include <pthread.h>
#include "queue.h"


typedef struct _MQUEUE_T {
    QUEUE *pstQueue;                /* 基本队列数据结构 */
    pthread_mutex_t mutex;          /* 互斥访问锁 */
    pthread_cond_t cond_full;       /* 条件变量锁（队列已达到满负荷）*/
    pthread_cond_t cond_empty;      /* 条件变量锁（队列为空）*/
    unsigned int iMQueueCapacity;   /* 多线程安全队列的上限容量*/
} MQUEUE_T;

/*  初始化多线程安全的队列 */
bool initMQueue(MQUEUE_T *pstMQueue, unsigned int iCapcity);

/* 将数据加入到队列 */
bool enMQueue(MQUEUE_T *pstMQueue, void *pQueueData, int iDataLen);

/* 从队列中读出数据 */
bool deMQueue(MQUEUE_T *pstMQueue, NODE *pstNode);

/* 释放队列占用的内存 */
void freeMQueue(MQUEUE_T *pstMQueue);

/* 初始化多线程安全的队列 */
MQUEUE_T * initMQueueAll(MQUEUE_T *, unsigned int iCapacity);



#endif 
